﻿using System;
using System.Collections.Generic;
using System.Linq;
using DevMaker.SIC.Dao.Business;
using DevMaker.SIC.Model;
using log4net;

namespace WebApplication1 {
    public partial class Reposicion : BasePage {
        readonly TurnoBussiness _turnoBussiness = new TurnoBussiness();
        private static readonly ILog Log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

        public override string TemplateName {
            get { return "Reposicion"; }
        }

        protected void Page_Load(object sender, EventArgs e) {
            var mostrarpaso1 = false;
            var mostrarpaso2 = false;
            var mostrarpaso3 = false;

            if (Request.Form["mostrarPaso"] == null || Request.Form["mostrarPaso"] == "1")
                mostrarpaso1 = true;

            if (Request.Form["mostrarPaso"] == "2")
                mostrarpaso2 = true;

            if (Request.Form["mostrarPaso"] == "3")
                mostrarpaso3 = true;

            if (mostrarpaso1) {
                var txtBuscar = Request.Form["txtbuscar"];
                var turnos = _turnoBussiness.ObtieneTurnosAbiertos();

                if (txtBuscar != null)
                    turnos =
                        turnos.FindAll(
                            foo =>
                            foo.Cajero.NombreCompleto.ToUpper().Contains(txtBuscar.ToUpper()) ||
                            foo.PuntoVenta.Nombre.ToUpper().Contains(txtBuscar.ToUpper()));
                AttributesTemplate.Add("turnos", turnos);

            }

            if (Request.Form["idTurno"] != null && Request.Form["idTurno"] != "") {
                var turno = _turnoBussiness.ObtieneTurnoPorId(Convert.ToInt32(Request.Form["idTurno"]));
                AttributesTemplate.Add("turno", turno);
                var tableHTML = turno.GenereteHTMLTableForReposicion();

                AttributesTemplate.Add("cajero", turno.Cajero);

                AttributesTemplate.Add("tableHTML", tableHTML);
            }
            AttributesTemplate.Add("txtbuscar", Request.Form["txtbuscar"]);
            AttributesTemplate.Add("mostrarPaso1", mostrarpaso1);
            AttributesTemplate.Add("mostrarPaso2", mostrarpaso2);
            AttributesTemplate.Add("mostrarPaso3", mostrarpaso3);

            if (mostrarpaso3) {
                try {
                    var turno = _turnoBussiness.ObtieneTurnoPorId(Convert.ToInt32(Request.Form["idTurno"]));
                    turno.Sucursal = Session["sucursal"] as Sucursal;
                    var t = CrearReposicion(turno);
                    if (t != null)
                        AttributesTemplate.Add("mostrarExito", true);
                } catch (Exception ex) {
                    AttributesTemplate.Add("mostrarError", true);
                    AttributesTemplate.Add("error", ex.Message);
                }
            }
        }

        private DevMaker.SIC.Model.Reposicion CrearReposicion(Turno turno) {
            try {
                var productos = turno.ReposicionInicial.Detalle.Select(detalle => detalle.Producto).ToList();
                var reposicion = new DevMaker.SIC.Model.Reposicion {
                    Fecha = DateTime.Now,
                    Supervisor = Session["usuarioConectado"] as Usuario,
                    Detalle = new List<ReposicionDetalle>(),
                    EsInicio = false
                };
                foreach (var p in productos) {
                    var rd = new ReposicionDetalle { Producto = p, Cantidad = Convert.ToInt64(Request.Form["cantidad_" + p.Id]) };
                    reposicion.Detalle.Add(rd);
                }
                var turnoBussiness = new ReposicionBussiness();
                reposicion = turnoBussiness.Crear(turno, reposicion);
                return reposicion;
            } catch (Exception ex) {
                Log.Error(ex);
                throw;
            }
        }
    }
}
